import webbrowser
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.common.exceptions import TimeoutException, WebDriverException
from webdriver_manager.chrome import ChromeDriverManager
import time


def test1():
    # 添加请求头，模拟真实浏览器访问
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
        'Accept-Encoding': 'gzip, deflate',
        'Connection': 'keep-alive',
    }
    
    try:
        param = {"wd": "莫烦Python"}  # 搜索的信息
        r = requests.get('http://www.baidu.com/s', params=param, headers=headers, timeout=10)
        print("状态码:", r.status_code)
        print("最终URL:", r.url)
        
        # 检查是否被重定向到验证码页面
        if "wappass.baidu.com" in r.url:
            print("警告: 请求被重定向到百度安全验证页面，这可能是因为触发了反爬虫机制")
            print("建议:")
            print("1. 添加更多请求头信息")
            print("2. 使用代理IP")
            print("3. 降低请求频率")
            print("4. 考虑使用Selenium模拟真实浏览器")
        else:
            webbrowser.open(r.url)
    except Exception as e:
        print(f"请求过程中发生错误: {e}")


def test2():
    """改进版本，直接获取搜索结果"""
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
    }
    
    try:
        param = {"wd": "莫烦Python"}
        r = requests.get('https://www.baidu.com/s', params=param, headers=headers, timeout=10)
        
        print("状态码:", r.status_code)
        print("最终URL:", r.url)
        
        # 检查响应内容
        print("响应内容长度:", len(r.text))
        
        # 检查是否包含验证码相关的内容
        if "验证码" in r.text or "captcha" in r.text.lower():
            print("检测到验证码页面")
        else:
            print("正常搜索结果页面")
            # 仅在非验证码页面时打开浏览器
            webbrowser.open(r.url)
    except Exception as e:
        print(f"请求过程中发生错误: {e}")


def test3():
    """使用Selenium实现百度搜索"""
    print("=== 测试3: 使用Selenium实现百度搜索 ===")
    
    # 设置Chrome选项
    chrome_options = Options()
    # 启用无头模式（不显示浏览器窗口）
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-dev-shm-usage')
    chrome_options.add_argument('--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36')
    # 设置窗口大小
    chrome_options.add_argument('--window-size=1920,1080')
    
    driver = None
    try:
        # 使用webdriver-manager自动管理ChromeDriver
        print("正在自动下载和配置ChromeDriver...")
        service = Service(ChromeDriverManager().install())
        print("ChromeDriver准备就绪")
        
        # 启动浏览器
        print("正在启动浏览器...")
        driver = webdriver.Chrome(service=service, options=chrome_options)
        print("浏览器已启动")
        
        # 访问百度首页
        print("正在访问百度首页...")
        driver.get("https://www.baidu.com")
        print("已访问百度首页")
        
        # 等待页面加载
        time.sleep(5)
        
        # 查找搜索框
        print("正在查找搜索框...")
        search_box = driver.find_element(By.ID, "kw")
        print("搜索框已找到")
        
        # 使用JavaScript确保元素可交互
        driver.execute_script("arguments[0].scrollIntoView();", search_box)
        time.sleep(1)
        
        # 输入搜索关键词
        print("正在输入搜索关键词...")
        driver.execute_script("arguments[0].value = '莫烦Python';", search_box)
        print("已输入搜索关键词")
        
        # 触发输入事件
        driver.execute_script("arguments[0].dispatchEvent(new Event('input'));", search_box)
        time.sleep(1)
        
        # 查找搜索按钮并点击
        print("正在查找搜索按钮...")
        search_button = driver.find_element(By.ID, "su")
        print("搜索按钮已找到")
        
        # 使用JavaScript点击搜索按钮
        print("正在点击搜索按钮...")
        driver.execute_script("arguments[0].click();", search_button)
        print("已点击搜索按钮")
        
        # 等待搜索结果加载
        print("正在等待搜索结果加载...")
        time.sleep(5)
        print("搜索结果已加载")
        
        # 获取当前URL
        current_url = driver.current_url
        print("搜索结果页面URL:", current_url)
        
        # 检查是否出现验证码
        if "wappass.baidu.com" in current_url:
            print("被重定向到验证码页面")
        else:
            print("成功获取搜索结果页面")
            # 获取搜索结果
            results = driver.find_elements(By.CSS_SELECTOR, "h3 a")
            print(f"找到 {len(results)} 个搜索结果:")
            
            for i, result in enumerate(results[:5]):  # 只显示前5个结果
                title = result.text
                link = result.get_attribute("href")
                print(f"{i+1}. {title}")
                print(f"   链接: {link}")
        
    except Exception as e:
        print(f"使用Selenium时发生错误: {e}")
        import traceback
        traceback.print_exc()
    finally:
        # 关闭浏览器
        if driver:
            try:
                driver.quit()
                print("浏览器已关闭")
            except Exception as e:
                print(f"关闭浏览器时发生错误: {e}")


if __name__ == '__main__':
    print("=== 测试3: 使用Selenium ===")
    test3()